package com.lanou3g.hw0512;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.Array;
import java.util.*;

/**
 * Created by dllo on 18/5/14.
 */
@WebServlet(name = "AServlet", urlPatterns = "/a")
/*
 Get请求 和post请求的异同
 1.get请求和post请求  都是 http协议规定的请求方式之一
 get请求更偏向于从服务器获取数据,而不会修改服务器中以后的数据
 post请求更偏向于向服务器发送数据
 2.get请求 请求参数拼接在url后
 post请求  请求参数 放在请求体中
 但是无论哪种方式,参数的 内容 和格式 都是一样的,
 每一个参数使用key=value的形式
 多个参数之间使用&进行连接
 3.由于get请求的参数是放在url上的,又因为url是由长度限制的
 所以,get请求不能发送过大的数据
 而post请求,由于是参数放入请求体,就没有长度限制了
 可以用来上传文件
 4.关于安全  ,get和 post一样 都不安全,因为 http协议本身就是不安全的协议
 */
public class AServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 对 request和response 的操作 是不分 get/post请求的
        response.setContentType("text/html;charset=utf-8");
         //使用 urf-8来解析 body中的参数
        request.setCharacterEncoding("utf-8");
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String gender = request.getParameter("gender");
        //要获取 向checkbox 这种 一个name对应多个value
        //的参数,需要使用该犯法,返回值是String数组
        String[] hobbies = request.getParameterValues("hobby");

        PrintWriter pw = response.getWriter();
        pw.println("用户名:" + username);
        pw.println("密码:" + password);
        pw.println("性别:" + gender);
        pw.println("爱好:" + Arrays.toString(hobbies));
        //获取所有的请求的参数
//        Enumeration这个对象可以 "像" resultSet一样使用
//                只有两个方法
//                hasMoreElements:是否还有没遍历的元素
//                        nextElement:下一个元素
        Enumeration<String> parameterNames
                =request.getParameterNames();
        while (parameterNames.hasMoreElements()){
            String name = parameterNames.nextElement();
            pw.println(name);
        }
        // 获取所有的参数信息,以map的形式
        //key就是参数的name
        //value 就是参数的value
        Map<String,String[]>map
                =request.getParameterMap();
        //获取所有的key组成一个set集合
         Set<String> keySet = map.keySet();
        for (String key : keySet) {
            //为了照顾 像check这样的
//            //多个value的情况,所以.value是一个数组
            String [] values =  map.get(key);
            //输出看效果
            pw.write(key+"::"+Arrays.toString(values));
        }
//      Iterator<String> iterator = keySet.iterator();
//        while (iterator.hasNext()){
//            String key =iterator.next();
        }
    }


